#ifndef _KERNEL_H
#define _KERNEL_H


#include "defs.h"
#include "console.h"

#define ANY_CHILD 0

/*
 * Funcion: int_09
 * ---------------
 * Handler de la interrupcin de teclado.  Retorna -1 si
 * no hay que cambiar de terminal, o el numero de terminal a la
 * que hay que cambiar.
 */
int int_09(int scancode);

/*
 * Funcion: int_08
 * ---------------
 * Handler de la interrupcion del timer-tick.
 */
void int_08(void);

/*
 * Funcion: k_main
 * ---------------
 * Es la funcion que se invoca desde Assembler para ir a codigo
 * de C al comienzo de la ejecucion.
 */
void k_main(void);

/*
 * Funcin: yield
 * --------------
 * Produce un context switch sin esperar a que termine el "time slot" actual.
 */
void yield(void);

/*
 * Funciones: wait, waitpid
 * ------------------------
 * waitpid suspende la ejecucion del proceso actual (pasando a estado de
 * espera) hasta tanto termine el proceso del PID especificado.
 * wait hace lo mismo esperando a todos los hijos del proceso actual.
 */
int wait(void);
void waitpid(unsigned int pid);

/*
 * Funcin: doexit
 * -------------
 * Termina la ejecucion del proceso corriendo actualmente con el estado
 * especificado. No se la llamo exit porque generaba un warning.
 */
void doexit(int status);

/*
 * Funcion: sleep
 * --------------
 * Bloquea el proceso actual por tantos segundos.
 */
void sleep(unsigned int seconds);

/*
 * Funcion: Funciones de manejo de excepciones del CPU
 * --------------
 */
void bounds(void);
void invop(void);
void div0(void);
void gpf(void);
void ssf(void);
void snp(void);
void pfault(void);

#endif /* _KERNEL_H */

